package com.wande.dataplatform.filecollection.domain.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.HashMap;
import java.util.Map;

/**
 * 校验统计信息
 *
 * @author wande
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ValidationStatistics {

    /**
     * 总记录数
     */
    private Long totalRecords;

    /**
     * 校验通过记录数
     */
    private Long validRecords;

    /**
     * 校验失败记录数
     */
    private Long invalidRecords;

    /**
     * 校验通过率
     */
    private Double passRate;

    /**
     * 按错误类型统计
     * key: 错误类型, value: 错误数量
     */
    @Builder.Default
    private Map<String, Long> errorTypeCount = new HashMap<>();

    /**
     * 按字段统计错误
     * key: 字段名, value: 错误数量
     */
    @Builder.Default
    private Map<String, Long> fieldErrorCount = new HashMap<>();

    /**
     * 计算通过率
     */
    public void calculatePassRate() {
        if (totalRecords != null && totalRecords > 0) {
            this.passRate = (double) validRecords / totalRecords * 100;
        } else {
            this.passRate = 0.0;
        }
    }

    /**
     * 增加错误类型计数
     */
    public void incrementErrorType(String errorType) {
        errorTypeCount.put(errorType, errorTypeCount.getOrDefault(errorType, 0L) + 1);
    }

    /**
     * 增加字段错误计数
     */
    public void incrementFieldError(String fieldName) {
        fieldErrorCount.put(fieldName, fieldErrorCount.getOrDefault(fieldName, 0L) + 1);
    }
}
